/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package tablasSql;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import otros.MiTableModel;
import otros.Util;

/**
 *
 * @author FERRETERIA funciona esto?
 */
public class FactXProd {
    
    public final static String TListArt = "listaarticulos";
    public final static String TListArtC = "listaartcompras";
      
    //-----------------------------------------------------------------------------------tabla
    public static Object [][] getTabla(String colName[], String tabla, String sql, Class[] tipos) {
        Sql mySql = new Sql();
        Object[][] data = new Object[mySql.getSizeTable(tabla)][colName.length];  
        String col[] = new String[colName.length];
        //realizamos la consulta sql y llenamos los datos en "Object"
        try{
           ResultSet res = mySql.getDatos(sql);
           int i = 0;
           while(res.next()){            
              for(int j=0; j<=colName.length-1;j++){             
                 if ((tipos[j] == java.lang.Integer.class))
                     data[i][j] = new Integer (res.getInt(colName[j]));    
                 else if (tipos[j] == java.lang.Float.class) 
                     data[i][j] = new Float (res.getFloat(colName[j]));
                 else
                     data[i][j] = res.getString(colName[j]);
              }          
              i++;
           }
           res.close();
         }catch(SQLException e){
            //log.error(sql + "\n" + e);
         } 
       return data;
    }
    
    public static ArrayList<ArrayList<Object>> getTabla(String codigoArt, int dia, int mes, int año,
                                                        boolean soloCli) {
        try {
            if (!codigoArt.equals("0")) {
                ArrayList<ArrayList<Object>> datos = new ArrayList<ArrayList<Object>>();
                Sql s = new Sql();
                int pasadas = soloCli? 1: 2;
                for (int i = 0; i < pasadas; i++) {
                    String sql = "SELECT id, albaranes, cantidad from " + TListArt + " where idArticulo = " + codigoArt;
                    if (i == 1)
                       sql = "SELECT id, cantidad from " + TListArtC + " where idArticulo = " + codigoArt;
                    
                    ResultSet res = s.getDatos(sql);
                    while (res.next()) {            // listado de ventas y de compras donde sale el articulo
                        int id = res.getInt("id");
                       
                        String tabla;
                        String campo;
                        String sql2;
                        int idTabla=0;
                        if (i==0) {             // ventas
                            idTabla = res.getInt("albaranes");
                            tabla = FacturasAlbaranes.getTablaSql(idTabla);
                            campo = tabla +".fechacrea";
                            sql2 = "Select nombrecomercial, concat_ws('-',idAno,idImp) as idFact, "
                               + campo + " from " + tabla + ", nclientes"
                               + " where " + tabla + ".idcliente = nclientes.codigo and "+tabla+".id = " + id;
                            if (soloCli)
                               sql2 += " and nclientes.codigo <> 0";
                        } else {                // compras
                            tabla = Util.FCOMPRAS;
                            campo = tabla +".fechacom";
                            sql2 = "Select nombrecomercial, "+ tabla+ ".id as idFact, tipo, "
                               + tabla +".fechacom from " + tabla + ", nproveedores"
                               + " where " + tabla + ".idProve = nproveedores.codigo and "+tabla+".id = " + id
                               ;//+ " and nproveedores.codigo <> 0";
                        }
                        
                        ArrayList<String> ops = new ArrayList<String>();
                        if (dia != 0)
                            ops.add("DAY(" + campo + ") = " + dia);
                        if (mes != 0)
                            ops.add("MONTH(" + campo + ") = " + mes);
                        if (año != 0)
                            ops.add("YEAR(" + campo + ") = " + año);

                        for(int j = 0; j < ops.size(); j++) {
                            sql2 += " and " + ops.get(j);
                        }

                        ResultSet rs2 = s.getDatos(sql2);
                        if (rs2.next()) {
                            ArrayList <Object> fila = new ArrayList<Object>();
                            fila.add(rs2.getString("nombreComercial"));
                            fila.add(rs2.getString("idFact"));
                            if (i == 1) idTabla = 4+rs2.getInt("tipo");
                            fila.add(""+idTabla);
                            fila.add(res.getFloat("cantidad"));
                            if(i==0)
                                fila.add(rs2.getString("fechacrea"));
                            else
                                fila.add(rs2.getString("fechacom"));
                            datos.add(fila);
                        }
                    }
                    
                } // for
                
                String sql = "Select * from regStock where articulo = " + codigoArt;
                ArrayList<String> ops = new ArrayList<String>();
                if (dia != 0)
                    ops.add("DAY(fecha) = " + dia);
                if (mes != 0)
                    ops.add("MONTH(fecha) = " + mes);
                if (año != 0)
                    ops.add("YEAR(fecha) = " + año);

                for(int j = 0; j < ops.size(); j++) {
                    sql += " and " + ops.get(j);
                }
                
                ResultSet rs = s.getDatos(sql);
                while (rs.next()) {
                    ArrayList <Object> fila = new ArrayList<Object>();
                    fila.add("Cambio de Stock manual");
                    fila.add("0");
                    fila.add("999");
                    fila.add(rs.getFloat("cantidad"));
                    fila.add(rs.getString("fecha"));
                    datos.add(fila);
                }
                return datos;
            }
        } catch (SQLException ex) {
            Logger.getLogger(FactXProd.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }           
}
